public class 字符串转换整数atoi {
    public int max = Integer.MAX_VALUE / 10;
    public int min = Integer.MIN_VALUE / 10;
    public int myAtoi(String ss) {
        char[] s = ss.toCharArray();
        int n = s.length;
        // 1. 去除前导空格
        int index = 0;
        while (index < n && s[index] == ' ') {
            index++;
        }
        // 2. 极端情况
        if (index == n) {
            return 0;
        }
        // 3. 读取第一个+-标志符
        int flag = 1; // 如果标志位 1 代表是正数, 0 代表是负数
        if (s[index] == '-') {
            flag = 0;
            index++;
        } else if (s[index] == '+') {
            index++;
        }
        // 4. 自此之后不可以再出现字符
        int ans = 0;
        while (index < n) {
            char ch = s[index++];
            if (ch < '0' || ch > '9') {
                break;
            }
            // 溢出判断
            if (flag == 1) {
                if ((ans > max) || (ans == max && ch - '0' > Integer.MAX_VALUE % 10)) {
                    return Integer.MAX_VALUE;
                }
            } else {
                if ((-ans < min) || (-ans == min && '0' - ch < Integer.MIN_VALUE % 10)) {
                    return Integer.MIN_VALUE;
                }
            }
            ans = ans * 10 + ch - '0';
        }
        if (flag == 0) {
            return -ans;
        }
        return ans;
    }
}
